package main

import (
	"log"
	"net/http"
	"github.com/gorilla/mux" // mux路由

	"shopping-backend/handlers" // 确保这里的路径正确
	"shopping-backend/models"

	// 新增swagger接口
	"github.com/swaggo/http-swagger"
	//"github.com/swaggo/files"
	_ "shopping-backend/docs" // swag init生成的docs路径
)

// @title 购物系统Swagger接口
// @version 20241125
// @description 这是后端api文档
// @description 注意每修改一次注释得重新swag init一下
// @termsOfService http://swagger.io/terms/
// @host localhost:8080
// @BasePath /
func main() {
	// 初始化数据库连接
	models.InitDB()
	defer models.CloseDB() // 程序结束时关闭数据库连接

	// 初始化数据（商品和用户等）
	models.InitData()

	// 创建路由
	r := mux.NewRouter()

	// 注册Swagger UI路由适配mux
	r.PathPrefix("/swagger/").Handler(httpSwagger.Handler(
        httpSwagger.URL("http://localhost:8080/swagger/doc.json"), //url提供api定义接口
    ))
    
	// 注册Swagger UI路由适配gin
	// r := gin.Default()
	// r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler()))

// 用户相关路由user.go
	//注册
	r.HandleFunc("/users", handlers.Register).Methods("POST")
	//登录
	r.HandleFunc("/login", handlers.Login).Methods("POST")
	//获取用户信息
	r.HandleFunc("/users/{id:[0-9]+}", handlers.GetUser).Methods("GET")
	//删除用户
	r.HandleFunc("/users/{id:[0-9]+}", handlers.DeleteUser).Methods("DELETE")

// 商品相关路由product.go
	//获取所有商品
	r.HandleFunc("/products", handlers.GetProducts).Methods("GET")
	//获取特定id商品
	r.HandleFunc("/products/{id:[0-9]+}", handlers.GetProduct).Methods("GET")
	// 添加商品
	r.HandleFunc("/product", handlers.AddProduct).Methods("POST")
	// 删除商品
	r.HandleFunc("/product/{id}", handlers.DeleteProduct).Methods("DELETE")

// 购物车相关路由cart.go
	//获取购物车商品
	r.HandleFunc("/users/{id:[0-9]+}/cart", handlers.GetCart).Methods("GET")
	//添加商品到购物车
	r.HandleFunc("/users/{id:[0-9]+}/cart", handlers.AddToCart).Methods("POST")
	// 在路由初始化部分添加删除购物车商品的路由
	r.HandleFunc("/cart/{user_id}/{product_id}", handlers.DeleteFromCart).Methods("DELETE")

//订单相关路由 order.go
	//获取订单信息
	r.HandleFunc("/order/{order_id:[0-9]+}", handlers.GetOrder).Methods("GET")
	// 创建新订单
	r.HandleFunc("/order", handlers.AddOrder).Methods("POST")
	// 删除订单
	r.HandleFunc("/order/{order_id}", handlers.DeleteOrder).Methods("DELETE")

// 支付相关路由 payment.go
	// 获取支付信息
	r.HandleFunc("/payment/{order_id:[0-9]+}", handlers.GetPayment).Methods("GET")
	// 创建支付信息
	r.HandleFunc("/payment", handlers.CreatePayment).Methods("POST")

	log.Println("Server started at :8080")
	log.Fatal(http.ListenAndServe(":8080", r))
}